Some software products such as anti-virus scanners, picture/video viewers, etc., process a large number of files. For example, a typical anti-virus scanner may scan all files in one or more selected folders on a hard drive of a computer or even all of the files on the hard drive. These hundreds or even thousands of files are usually loaded in the computer memory (e.g., RAM) prior to being processed.
In a typical scenario, a module of the software product requests the operating system of the computer to provide a list of files to be loaded and processed that are within a specified scope (e.g., a folder, a list of folders, a disk, etc.). The operating system returns a list of file identifiers based on the order the files are listed in a file-system database maintained by the operating system. Then, the software module, with assistance from the operating system, loads the files associated with the file identifiers in the list from permanent storage (e.g., a hard drive). The software processes a file as it is loaded, or may processes a set of files after the files in the set are loaded.
The overall performance of the software product generally depends not only on the speed of processing the loaded files, but also on the speed of loading the files. In particular, when a large number of files are to be loaded, such as by an anti-virus software, slowly loading several files can significantly affect the overall software performance. Various known techniques, however, only improve the speed of processing of the files—not the speed with which they are loaded prior to processing. According to one method, the loading and processing of files are interleaved such that the processor may analyze a previously loaded file while waiting for one or more other files to be loaded. This can increase the processor utilization, improving the overall performance of the software. These systems, however, do not improve the speed of loading of the several files, which, as described above, also adversely affects software performance. Therefore, there is a need for methods and systems for addressing file loading times, thus improving the overall performance of software products requiring processing of a large number of files.